import { createRouteMap } from "./create-route-map"

export function createRoute (record, { path} ) {
  let matched = []
  if (record) {
    while(record) {// 有记录将自己插入队列中 [/about/a, /a]
      matched.unshift(record)
      // 保留 parent 作用   一层层向上找
      record = record.parent
    }
  }

  return {
    path,
    matched
  }
}


// 路由表 拍平
export const creatematcher = (routes) => { // 匹配器
  // 路径和记录的映射表
  const {pathMap} = createRouteMap(routes)

  // 动态添加路由， 就是重新生成映射表
  function addRoutes(routes) {
    createRouteMap(routes, pathMap) // 在原来基础上继续添加路由
  }

  // 拿到路径， 去匹配
  function match(location) {
    let record = pathMap[location] // 根据路径找到 匹配数组

    // {path: '/about/a', matched: [about组件， a组件]}
    if (record) {
      return createRoute(record, {path: location})
    }
    return createRoute(null, {path: location})
  }

  // 从子 向上查找,命中最小的开始， match('/about') 就匹配自己一层
  console.log(match('/about/a'))

  // 一个路径对应的记录是谁 component， 记录这个有没有父，有父 也要创建一个关联


  // addRoutes([
  //   {
  //     path: '/about',
  //     children: [{
  //       path: 'c',
  //       component: {component: (h) => <div>ccccccccc</div>}
  //     }]
  //   }
  // ])
  return {
    addRoutes, // 添加路由
    match
  }
}